/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize) {
    int len = temperaturesSize;
    *returnSize = len;  // step 1# 设置返回数组的大小

    // step 2# 创建结果数组，并初始化为0
    int *result = (int *)malloc(sizeof(int) * len);
    memset(result, 0x00, sizeof(int) * len);

    // step 3# 初始化一个栈，用来存储下标，栈里面存的是递减序列
    int stack[len];
    memset(stack, 0x00, sizeof(stack));
    int top = 0;  // step 3.1# 栈顶指针（注意：一开始top指向0，栈内有一个元素）

    // step 4# 遍历温度数组
    for (int i = 1; i < len; i++) {
        // step 4.1# 如果当前温度小于等于栈顶温度，直接入栈
        if (temperatures[i] <= temperatures[stack[top]]) {
            stack[++top] = i;
        } else {
            // step 4.2# 当前温度高于栈顶，开始弹栈
            while (top >= 0 && temperatures[i] > temperatures[stack[top]]) {
                // step 4.2.1# 计算比当前温度低的天数差
                result[stack[top]] = i - stack[top];
                top--; // step 4.2.2# 出栈
            }
            // step 4.3# 当前元素入栈
            stack[++top] = i;
        }
    }

    // step 5# 返回最终结果数组
    return result;
}
